<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script>
    //创建数组
    let fruits1 = [];
    let fruits2 = new Array();

    let fruits = ["a", "b", "c", "d", "e"];
    console.log(fruits);

    //TIPS:
    // 在对对象进行遍历时，如不需要访问属性名选择for...of循环，如需访问属性名选择for...in循环
    // 在对数组进行访问时，使用forEach得到较好的可读性，传统的for循环能够带来很高的性能及拓展性

    console.log("====================遍历 forEach============================");
    //FOREACH方法(数组内置高阶方法，含义清晰)
    // 优点：函数式编程，简洁，快速领会代码含义
    // 缺点：无法对对象使用
    fruits.forEach(function (item, index, array) {
        console.log(item, index, array);
    });

    console.log("====================遍历 in ============================");
    //FOR…IN循环(效率较低)
    // 优点：唯一一个能够获取对象的属性名的遍历方式
    // 缺点：会将对象通过继承得到的属性一齐遍历，造成非预料的结果且效率较低
    for (let i in fruits) {
        console.log(fruits[i]);
    }

    console.log("====================遍历 传统============================");
    //FOR循环(效率最高)
    // 优点：JavaScript最普遍的for循环，执行效率最高
    // 缺点：无法遍历对象
    for (let j = 0; j < fruits.length; j++) {
        console.log(fruits[j]);
    }

    console.log("====================遍历 of============================");
    //FOR…OF循环(效率较高)
    // 优点：能够快速访问非继承属性值
    // 缺点：需要ES6支持
    for (let value of fruits) {
        console.log(value);
    }

    console.log("======================push 添加尾部==========================");
    //添加元素到数组的末尾,返回数组长度
    let push = fruits.push("1");
    console.log(fruits, push);

    console.log("======================unshift 添加头部==========================");
    //添加元素到数组的头部,返回数组长度
    let unshift = fruits.unshift("-1");
    console.log(fruits, unshift);

    console.log("======================shift 删除头部==========================");
    //删除头部元素,返回头部元素
    let shift = fruits.shift();
    console.log(fruits, shift);

    console.log("======================pop 删除尾部==========================");
    //删除尾部元素,返回尾部元素
    let pop = fruits.pop();
    console.log(fruits, pop);

    console.log("======================slice 复制数组==========================");
    //返回指定范围内元素组成的新数组
    let slice = fruits.slice(0, fruits.length);
    console.log(slice);//[ "a", "b", "c", "d", "e" ]
    console.log(fruits);//[ "a", "b", "c", "d", "e" ]

    console.log("=============splice 通过索引删除元素=======================");
    //返回被删除的元素
    //截取
    //参数： startIndex,deleteCount
    let splice = fruits.splice(0, 2);
    console.log(splice);// [ "a", "b" ]
    console.log(fruits);// [ "c", "d", "e" ]

    console.log("======================indexOf 找出某个元素在数组中的索引=============");
    //返回下标
    let indexOf = slice.indexOf("d");
    console.log(indexOf);//3

    //

</script>
</body>
</html>